package com.yhd;

import com.yhd.mapper.ProcessChainMapper;
import com.yhd.mapper.ProcessMapper;
import com.yhd.mapper.ProcessStepManagerMapper;
import com.yhd.model.Process;
import com.yhd.model.ProcessChain;
import com.yhd.model.ProcessStepManager;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @author yhd
 * @email yinhuidong1@xiaomi.com
 * @description TODO
 * @since 2021/5/28 上午12:27
 */
@Service
public class ProcessService {

    @Resource
    private ProcessMapper processMapper;

    @Resource
    private ProcessStepManagerMapper processStepManagerMapper;

    @Resource
    private ProcessChainMapper processChainMapper;
    /**
     * 管理者 ： 建立流程
     */
    public void createProcess(Process process){
        processMapper.insertOne(process);
    }
    /**
     * 管理者：给流程创建步骤
     */
    public void createStep(Process process, ProcessStepManager processStepManager){
        processMapper.insertOne(process);
        processStepManagerMapper.insertOne(processStepManager);
    }
    /**
     * 管理者：修改流程
     */
    public void updateProcess(Process process){
        processMapper.updateOne(process);
    }
    /**
     * 管理者：修改步骤对应的审批人
     */
    public void updateStep(ProcessStepManager processStepManager){
        processStepManagerMapper.updateOne(processStepManager);
    }

    /**
     * 发起者：发起流程
     */
    public void createProcessChain(ProcessChain processChain){
        processChainMapper.insertOne(processChain);
        //创建成功后，发消息通知下一步的处理人 TODO
    }

    /**
     * 发起者：查看自己发起的流程 TODO
     */
    public List<Process> findMyCreateProcess(Integer userId){
        // 流程的第一步  =1 最后一步 id =0

    }

    /**
     * 发起者：根据流程id 查看流程详细细节
     */
    public Object findProcessByProcessChainId(Integer id){
        //需要查出来这个流程已经执行的步骤
        List<ProcessChain> doneList=processChainMapper.selectDonesById(id);
        //TODO 从这个运行流程查询出执行的审批流id
        Integer processId=0;
        if (doneList!=null && doneList.size()>0 && doneList.get(0)!=null){
            doneList.get(0).getProcessId();
        }
        //查看这个流程规定好的步骤
        List<Process> processList = processMapper.selectListByProcessId(processId);
        //最终将两个list返回上层
        return null;
    }
    /**
     * 发起者：取消流程
     */

    /**
     * 审批人：查看自己待处理的流程
     */
    public List<ProcessChain> getProcessList(Integer userId){
        //查
    }

    /**
     * 审批人：自己负责的流程 TODO
     */

    /**
     * 审批人：审批某一个流程的某一步
     * 1.通过就流转下一步，
     *   1.1:如果下一步没了，就结束流程
     *   1.2:否则，通知下一步的处理人
     * 2.驳回，
     *      记录DB这次操作
     *      发消息通知流程发起人（重新申请版本version需要+1）
     *
     *
     *
     */


}
